const utils = require("../../../../utils/utils");
const api = require("../../../../utils/cloudAPIUtils");
const app = getApp();

Page({
  data: {
    tradeNo:null,
    tradeInfo:null,
    timer:null,     //定时器对象
    useTime:'00:00',//已使用时间 
    useTimeM:0,     //已使用时间：分钟
    modalName:null, //开启的对话框名称
    modelState:0,   //0：充电未结束  1：充电结束
    state:0,        //设备状态  0：未开启  1：使用中
    flag:true,
    isLoading:false, //是否正在刷新
  },

  /**刷新订单 */
  _refreshOrder(){
    if(this.data.isLoading)return;
    this.setData({
        isLoading:true
    })
    this._clearInterval(true);
    wx.showLoading({
      title: '刷新中...',
      mask:true
    })
    this._initPage(true);
  },
  /**初始化页面数据 */
  _initPage(hideLoading=false){
    console.log("init",hideLoading)
    let self = this;
    //查询设备是否开启
    this._startDevice(30,(res)=>{
        //阻止多个回调重复执行
        let flag = self.data.flag;
        if(flag)self.setData({flag:false});
        else return;
  
        if(res == 200){
            if(self.data.state == 0){
                self.selectComponent("#progress").change(100);
            }
            api.post(api.url.orderInfo,{
                tradeNo:self.data.tradeNo
            },res=>{
                if(res.data.code==200){
                    const tradeInfo = res.data.body;
                    self.setData({
                        tradeInfo,
                        state:1,
                        isLoading:false
                    })
                    self._timeInit(tradeInfo.createDate,0);
                }
                if(hideLoading){
                    wx.hideLoading();
                }
            })
        }else if(res == 201){
            wx.showToast({
              title: '订单已完成！',
              icon:'success'
            })
            setTimeout(() => {
                self.toHistory();
            }, 1000);
        }else{
            wx.showToast({
                title: '网络超时，请重试！',
                icon:'error'
            })
            setTimeout(() => {
                  self.toHistory();
            }, 1000);
        }
    }); 
  },
  /**设备开启 */
  _startDevice(time,callback){
    let self = this;
    time = time || 30; //询问执行结果超时时间，默认30秒

    let payType = 1;  //1是钱包支付  3是微信支付
    let number = 0;
    let turn = setInterval(()=>{
      number++;
      if(number%3==0){
        api.post(api.url.cdczResult,{
          tradeNo: self.data.tradeNo,
          payType:payType
        },(res)=>{
          if(res.data.code==200){
            if(res.data.body.resultCode==2){
                clearInterval(turn);
                number=100;
                if(callback)callback(200);
            }
            if(res.data.body.resultCode==3){
                clearInterval(turn);
                number=100;
                if(callback)callback(201);
            }
          }
          if(number>=99){
            if(callback)callback(500);
          };
        });
      }
      if(number>100){
        clearInterval(turn);
        return;
      };
      if(self.data.state == 0){
        self.selectComponent("#progress").change(number)
      }
    },time*10)
  },
  /**时间初始化 */
  _timeInit(start,chargeTime){
    if(this.data.timer && this.data.timer.interval){
      clearInterval(this.data.timer.interval);
    }
    start = new Date(start.replace(/-/g,"/")).getTime();
    let timer = {};
    let self = this;
    // 开启定时器，刷新已使用时间
    timer.interval = setInterval(()=>{
        const useTime = utils.timeFormat(new Date().getTime() - start);
        
        const useTimeArr = useTime.split(":");
        const useTimeM = parseInt(useTimeArr[0]);
        const s = parseInt(useTimeArr[1]);
        self.setData({useTime,useTimeM})
        // 5分钟刷新一次定时器
        if(useTimeM!=0 && useTimeM%5==0 && s ==0){
            console.log("刷新："+useTime);
            self._refreshOrder();
        }
    },1000)
    // 开启延时器，在充电结束返回首页
    // 剩余时间 =  服务时长 -（现在时间 - 开始时间）
    if(this.data.timer && this.data.timer.timeout){
      clearTimeout(this.data.timer.timeout);
    }
    self.setData({timer})
  },
  /**清理现场 */
  _clearInterval(flag = false){
    console.log("清理定时器")
    if(this.data.timer && this.data.timer.interval){
      clearInterval(this.data.timer.interval);
    }
    if(this.data.timer && this.data.timer.timeout){
      clearTimeout(this.data.timer.timeout);
    }
    this.setData({
      timer:null,
      flag:flag
    })
  },

  /**
   * 停止充电按钮
   */
  btnStop(){
    let self = this;
    if(this.data.modelState==0){
      wx.showLoading({
        title: '请求中...',
        mask:true
      })
      /**此处调用停止充电接口 */
      api.post(api.url.cdczClose,{
        tradeNo:self.data.tradeNo
      },res=>{
        if(res.data.code==200){
          wx.hideLoading();
          self.setData({modelState:1});
          self._clearInterval();
        }else{
          wx.hideLoading();
          wx.showToast({
            title: res.data.msg,
          })
        }
      })
    }else{
      self.toHistory();
    }
  },

  //展示和隐藏对话框
  btnShowModal(){
    this.setData({
      modalName:'modal'
    })
  },
  btnHideModal(){
    this.setData({
      modalName:null
    })
  },

  //跳转页面
  toHistory(){
    wx.reLaunch({
      url: '/pages/index/index'
    })
  },

  onLoad(options) {
    if(!options || !options.tradeNo)return;
    this.setData({
        tradeNo:options.tradeNo
    })
  },
  onShow(){this._initPage()},
  onHide(){this._clearInterval(true)},
  onUnload() {this._clearInterval()},
})